package com.huohuzhihui.merchant.service.impl;

import java.util.Date;
import java.util.List;
import com.huohuzhihui.common.utils.DateUtils;
import com.huohuzhihui.common.utils.RandomUtil;
import com.huohuzhihui.common.utils.uuid.IdUtils;
import com.huohuzhihui.merchant.domain.MerCoupon;
import com.huohuzhihui.merchant.exception.CouponCheckException;
import com.huohuzhihui.merchant.mapper.MerCouponMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.huohuzhihui.merchant.mapper.MerCouponGetMapper;
import com.huohuzhihui.merchant.domain.MerCouponGet;
import com.huohuzhihui.merchant.service.IMerCouponGetService;

/**
 * 优惠券领取Service业务层处理
 * 
 * @author huohuzhihui
 * @date 2021-03-30
 */
@Service
public class MerCouponGetServiceImpl implements IMerCouponGetService 
{
    @Autowired
    private MerCouponGetMapper merCouponGetMapper;
    @Autowired
    private MerCouponMapper merCouponMapper;
    /**
     * 查询优惠券领取
     * 
     * @param id 优惠券领取ID
     * @return 优惠券领取
     */
    @Override
    public MerCouponGet selectMerCouponGetById(Long id)
    {
        return merCouponGetMapper.selectMerCouponGetById(id);
    }

    /**
     * 查询优惠券领取列表
     * 
     * @param merCouponGet 优惠券领取
     * @return 优惠券领取
     */
    @Override
    public List<MerCouponGet> selectMerCouponGetList(MerCouponGet merCouponGet)
    {
        return merCouponGetMapper.selectMerCouponGetList(merCouponGet);
    }

    /**
     * 新增优惠券领取
     * 
     * @param merCouponGet 优惠券领取
     * @return 结果
     */
    @Override
    public int insertMerCouponGet(MerCouponGet merCouponGet)
    {
        merCouponGet.setCreateTime(DateUtils.getNowDate());
        return merCouponGetMapper.insertMerCouponGet(merCouponGet);
    }

    /**
     * 修改优惠券领取
     * 
     * @param merCouponGet 优惠券领取
     * @return 结果
     */
    @Override
    public int updateMerCouponGet(MerCouponGet merCouponGet)
    {
        return merCouponGetMapper.updateMerCouponGet(merCouponGet);
    }

    /**
     * 批量删除优惠券领取
     * 
     * @param ids 需要删除的优惠券领取ID
     * @return 结果
     */
    @Override
    public int deleteMerCouponGetByIds(Long[] ids)
    {
        return merCouponGetMapper.deleteMerCouponGetByIds(ids);
    }

    /**
     * 删除优惠券领取信息
     * 
     * @param id 优惠券领取ID
     * @return 结果
     */
    @Override
    public int deleteMerCouponGetById(Long id)
    {
        return merCouponGetMapper.deleteMerCouponGetById(id);
    }

    @Override
    public int receiveCoupon(Long userId, long activityId,long couponId) {
        //插入优惠券领取记录
        MerCouponGet merCouponGet = new MerCouponGet();
        merCouponGet.setCouponId(couponId);
        merCouponGet.setUserId(userId);
        merCouponGet.setActivityId(activityId);
        Date now = DateUtils.getNowDate();
        merCouponGet.setCreateTime(now);
        merCouponGet.setCouponCode(RandomUtil.generateOnlyNumber(10));

        //设置优惠券到期时间
        MerCoupon merCoupon = this.merCouponMapper.selectMerCouponById(couponId);
        int timeType = merCoupon.getTimeType();
        if(timeType==0){//基于领取时间的有效天数days
            merCouponGet.setBeginDate(now);
            merCouponGet.setEndDate(DateUtils.addDays(now,merCoupon.getDays()));
        }else if(timeType==1){
            merCouponGet.setBeginDate(merCoupon.getStartTime());
            merCouponGet.setEndDate(merCoupon.getOverTime());
        }

        return insertMerCouponGet(merCouponGet);
    }

    @Override
    public Long selectMerCouponGetCount(MerCouponGet merCouponGet) {
        return this.merCouponGetMapper.selectMerCouponGetCount(merCouponGet);
    }

    @Override
    public Long selectMerCouponCheckCount(MerCouponGet merCouponGet) {
        return this.merCouponGetMapper.selectMerCouponCheckCount(merCouponGet);
    }

    @Override
    public int checkCouponByCouponCode(String couponCode) throws CouponCheckException{
        MerCouponGet merCouponGet =  this.merCouponGetMapper.selectMerCouponGetByCouponCode(couponCode);
        //校验优惠券日期
        if(merCouponGet!=null){
            if(merCouponGet.getUseStatus()==0){
                Date endDate = merCouponGet.getEndDate();
                Date now = DateUtils.getNowDate();
                if(new Date().before(endDate)){
                    merCouponGet.setUseTime(now);
                    merCouponGet.setUseStatus(1);
                    return this.merCouponGetMapper.updateMerCouponGet(merCouponGet);
                }else{
                    throw new CouponCheckException(5002,"已经过期的优惠券");
                }
            }else if(merCouponGet.getUseStatus()==1){
                throw new CouponCheckException(5003,"已经用过的优惠券");
            }else {
                throw new CouponCheckException(5002,"已经过期的优惠券");
            }
        }else{
            throw new CouponCheckException(5001,"非本店优惠券");
        }

    }



}
